<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>websocket通讯</title>
</head>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
    var socket;

    function openSocket() {

        $.ajax({
            type: 'POST',
            url: "http://localhost:9080/user/login",
            data:{
                userName:$("#username").val(),
                password:$("#password").val(),
            },
            success: function(data){
                console.log(data);
                var code1 = data.code;
                if (code1 == 200) {
                    connect();
                }
                // var code = JSON.parse(data).code;
            },
            error: function(){
                $.toast("发送失败", "text")
            }
        })

    }
    
    function connect() {
        if(typeof(WebSocket) == "undefined") {
            console.log("您的浏览器不支持WebSocket");
        }else{
            console.log("您的浏览器支持WebSocket");
            //实现化WebSocket对象，指定要连接的服务器地址与端口  建立连接
            //等同于socket = new WebSocket("ws://localhost:8888/xxxx/im/25");
            //var socketUrl="${request.contextPath}/im/"+$("#userId").val();
             // var socketUrl="http://localhost:9080/imserver/"+$("#userId").val();
            var socketUrl="http://localhost:9080/imserver/"+$("#username").val();
            socketUrl=socketUrl.replace("https","ws").replace("http","ws");
            console.log(socketUrl);
            if(socket!=null){
                console.log("socket不等于空");
               // socket.close();
               // socket=null;
            }
            socket = new WebSocket(socketUrl);
            //打开事件
            socket.onopen = function() {
                console.log("websocket已打开");
                //开始检测心跳
                console.log("开始检测心跳");
                heartCheck.start();
                //socket.send("这是来自客户端的消息" + location.href + new Date());
            };

            //获得消息事件
            socket.onmessage = function(msg) {
                var val=JSON.parse(msg.data)
                console.log("111111111111111"+val+"*********");
                if(val.code===411){

                    alert("你的账号已在其他地方登录！！！")
                   // return;
                    // socket.close();
                    // window.location.href="index";
                }else if (val.checkHeart=="pong"){

                console.log("重置检测心跳开始");
                heartCheck.reset();
            }

                console.log(val);

                //发现消息进入    开始处理前端触发逻辑
            };

            //关闭事件
            socket.onclose = function() {
                console.log("websocket已关闭");
            };
            //发生了错误事件
            socket.onerror = function() {
                console.log("websocket发生了错误");
                connect();
            }
        }
    }
    function sendMessage() {
        if(typeof(WebSocket) == "undefined") {
            console.log("您的浏览器不支持WebSocket");
        }else {
            console.log("您的浏览器支持WebSocket");
            console.log('{"toUserId":"'+$("#toUserId").val()+'","contentText":"'+$("#contentText").val()+'"}');
            socket.send('{"toUserId":"'+$("#toUserId").val()+'","contentText":"'+$("#contentText").val()+'"}');
        }
    }

    //心跳检测
    var heartCheck = {
        timeout: 20000,
        timeoutObj: null,
        reset: function(){
            clearTimeout(this.timeoutObj);
            this.start();
        },
        start: function(){
            this.timeoutObj = setTimeout(function(){
                var tempheart={
                    checkHeart:"ping"
                };
                socket.send(JSON.stringify(tempheart));
            }, this.timeout)
        },
    };
</script>
<body>
<p>【userId】：<div><input id="userId" name="userId" type="text" value="10"></div>
<p>【用户名】：<div><input id="username" name="username" type="text" value="10"></div>
<p>【密码】：<div><input id="password" name="password" type="text" value="20"></div>
<p>【toUserId】：<div><input id="toUserId" name="toUserId" type="text" value="20"></div>
<p>【toUserId】：<div><input id="contentText" name="contentText" type="text" value="hello websocket"></div>
<p>【操作】：<div><button type="button" onclick="openSocket()">登录开启socket</button></div>
<p>【操作】：<div><button onclick="sendMessage()">发送消息</button></div>
</body>

</html>